package mysql8学习.高级.第15章_锁;

/**
 * 1.悲观锁    自身的锁机制来实现
 * 悲观锁是一种思想，顾名思义就是很悲观，对数据被其他事务的修改持保守态度,
 * 会通过数据库"自身的锁机制来实现"，从而保证数据操作的排它性。
 *
 * 悲观锁总是假设最坏的情况，每次去拿数据的时候都认为别人会修改,
 * 所以每次在拿数据的时候都会，上锁，
 * 这样别人想拿这个数据就会阻塞直到它拿到锁
 * (共享资源每次只给一个线程使用，其它线程阻塞，用完后再把资源转让给其它线程)。
 * 比如行锁，表锁等，读锁，写锁等，都是在做操作之前先上锁，当其他线程想要访问数据时，
 * 都需要阻塞挂起。
 * Java中 synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。
 *
 * 注意: select ... for update语句执行过程中"所有扫描"的行都会被锁上，
 * 因此在MySQL中用悲观锁必须确定使用了索引，而不是全表扫描，否则将会把整个表锁住。
 *
 * 悲观锁不适用的场景较多，它存在一些不足， 因为悲观锁大多数情况下依靠数据库的锁机制来实现,
 * 以保证程序的并发访问性，同时这样对数据库性能开销影响也很大，特别是长事务而言，
 * 这样的开销往往无法承受，这时就需要乐观锁。
 *
 */
public class C_C1_悲观锁 {
}
